home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Texteditors / Origami / bindings / vi-fun / functions < prev    next >
Encoding:
Text File  |  1996-09-27  |  30.6 KB  |  1,267 lines

  1.    {{{  Ctags
  2.    {{{  push-tag
  3.    (deffun push-tag
  4.     (
  5.       enter-command-mode
  6.       ; push the current position here..
  7.       find-or-enter-and-go-tags-buffer
  8.     )
  9.    )
  10.    }}}
  11.    {{{  pop-tag
  12.    (deffun pop-tag
  13.     ( no-operation
  14.     )
  15.    )
  16.    }}}
  17.    {{{  goto-tag-in-window
  18.    (deffun goto-tag-in-window
  19.     (
  20.     )
  21.    )
  22.    }}}
  23.    {{{  print-stack
  24.    (deffun print-stack
  25.     ( no-operation
  26.     )
  27.    )
  28.    }}}
  29.    }}}
  30.    {{{  macros for command, motion, and argument modes
  31.       {{{  macros to repeat searches
  32.       {{{  To get the last item ftpom the history list
  33.       (defmac use-prev-from-hist
  34.        ( previous-line
  35.          newline-and-indent
  36.        )
  37.       )
  38.       }}}
  39.       (deffun repeat-forward
  40.        ( enter-command-from-insert forward-character search-forward use-prev-from-hist))
  41.       (deffun repeat-reverse
  42.        ( enter-command-from-insert backward-character search-reverse use-prev-from-hist))
  43.       }}}
  44.       {{{  macros to fix the semantics of origami yanking
  45.       {{{  vi-put-buffer-above
  46.       (deffun vi-put-buffer-above
  47.        ( enter-command-from-insert
  48.          delete-mode-view
  49.          undo-delete-line
  50.          double-line
  51.          delete-line
  52.          unfold-fold
  53.          add-mode-view
  54.          previous-line
  55.        )
  56.       )
  57.       }}}
  58.       {{{  vi-undo-delete-line
  59.       (deffun vi-put-buffer
  60.        ( next-line
  61.          vi-put-buffer-above
  62.        )
  63.       )
  64.       }}}
  65.       }}}
  66.       {{{  macros for insert mode entry bindings
  67.       (deffun append (enter-command-from-insert forward-character delete-mode-view enter-insert-mode))
  68.       (deffun Append (enter-command-from-insert end-of-line delete-mode-view enter-insert-mode))
  69.       (deffun insert (enter-command-from-insert delete-mode-view enter-insert-mode))
  70.       (deffun Insert (enter-command-from-insert beginning-of-line delete-mode-view enter-insert-mode))
  71.       (deffun open
  72.        (enter-command-from-insert end-of-line
  73.         delete-mode-view
  74.         newline-and-indent ; this needs a hook for eg c-mode ?
  75.         enter-insert-mode
  76.        )
  77.       )
  78.       (deffun Open
  79.        (enter-command-from-insert beginning-of-line
  80.         delete-mode-view
  81.         newline-and-indent ; needs a hook again!
  82.         previous-line
  83.         enter-insert-mode
  84.        )
  85.       )
  86.       }}}
  87.       {{{  macros for searching
  88.       (deffun search-f
  89.         ( enter-command-from-insert
  90.           search-forward
  91.         )
  92.       )
  93.       (deffun search-r
  94.         ( enter-command-from-insert
  95.           search-reverse
  96.         )
  97.       )
  98.       (deffun il-search-f
  99.         ( enter-command-from-insert
  100.           incremental-search-forward
  101.         )
  102.       )
  103.       (deffun il-search-r
  104.         ( enter-command-from-insert
  105.           incremental-search-reverse
  106.         )
  107.       )
  108.  
  109.       }}}
  110.       {{{  macros for TtFf
  111.       {{{  for Ff
  112.       {{{  right-loop
  113.       (defmac right-loop
  114.       (do(
  115.           if test-end-line
  116.            ( if or(stop-at-eol test-bottom)
  117.               ( return-from-macro
  118.               )
  119.              fi
  120.              next-line
  121.              beginning-of-line
  122.            )
  123.            else
  124.             ( forward-character
  125.             )
  126.            fi
  127.           )while not(test-char tc)
  128.        )
  129.                 )
  130.        (deffun find-char-right
  131.         ( enter-command-from-insert
  132.           parameter-mode
  133.           prompt-char-counter tc ("Enter "  "target "  "character )
  134.           right-loop
  135.           comrepmv-mode
  136.        )
  137.       )
  138.       }}}
  139.       {{{  left-loop
  140.       (defmac left-loop
  141.       (do(
  142.           if test-begin-line
  143.            ( if or(stop-at-eol test-top)
  144.               ( return-from-macro
  145.               )
  146.              fi
  147.              previous-line
  148.              end-of-line)
  149.              else
  150.              ( backward-character)
  151.              fi
  152.              )while not(test-char tc)
  153.       )
  154.       )
  155.       (deffun find-char-left
  156.        ( enter-command-from-insert
  157.          parameter-mode
  158.          prompt-char-counter tc ("Enter "  "target "  "character )
  159.            left-loop
  160.            comrepmv-mode
  161.        )
  162.       )
  163.       }}}
  164.       }}}
  165.       {{{  for Tt
  166.       (deffun one-before
  167.        ( enter-command-from-insert
  168.          find-char-right
  169.          backward-character
  170.        )
  171.       )
  172.  
  173.       (deffun one-after
  174.        ( enter-command-from-insert
  175.         find-char-left
  176.         forward-character
  177.        )
  178.       )
  179.       }}}
  180.       }}}
  181.       {{{  replace
  182.       (deffun replace-chars
  183.        ( enter-command-from-insert
  184.          enter-parameter-mode
  185.          prompt-char-counter tc ("Enter "  "target "  "character )
  186.          delete-character
  187.          insert-ascii tc
  188.          enter-command-mode
  189.          backward-character
  190.        )
  191.       )
  192.       }}}
  193.       {{{  leaving with ZZ
  194.       (deffun real-save-and-exit-origami ; because view mode stops autosaves!
  195.        ( enter-command-from-insert
  196.          delete-mode-view
  197.          save-and-exit-origami
  198.        )
  199.       )
  200.       }}}
  201.       {{{  doing ~
  202.       (deffun proper-toggle-case
  203.        ( enter-command-from-insert
  204.          if test-char-set close-fence
  205.           (
  206.            set matching  store-line
  207.            goto-matching-fence
  208.            show-cursor 5
  209.            set go-line-arg matching-fence-y go-line
  210.            goto matching-fence-x
  211.            set matching 0
  212.           )
  213.          else
  214.           ( delete-mode-view
  215.             case-character-toggle
  216.             add-mode-view
  217.           )
  218.          fi
  219.          forward-character
  220.          if and(test-end-line stop-at-eol) ( backward-character ) fi
  221.        )
  222.       )
  223.       }}}
  224.       {{{  doing %
  225.       (deffun proper-percent
  226.        ( enter-command-from-insert
  227.          if not(test-char-set fence)
  228.           {{{  find fence
  229.           ( do
  230.              ( forward-text-character )
  231.             while not(test-char-set fence)
  232.           )
  233.           }}}
  234.          fi
  235.          goto-matching-fence
  236.        )
  237.       )
  238.       }}}
  239.       {{{  folding macros
  240.           {{{  vi-open-fold
  241.           (deffun vi-open-fold
  242.            ( enter-command-from-insert
  243.              open-fold
  244.            )
  245.           )
  246.           }}}
  247.           {{{  vi-close-fold
  248.           (deffun vi-close-fold
  249.            ( enter-command-from-insert
  250.              close-fold
  251.            )
  252.           )
  253.           }}}
  254.           {{{  vi-enter-fold
  255.           (deffun vi-enter-fold
  256.            ( enter-command-from-insert
  257.                  delete-mode-view
  258.              enter-fold
  259.              add-mode-view
  260.            )
  261.           )
  262.           }}}
  263.           {{{  vi-exit-fold
  264.           (deffun vi-exit-fold
  265.            ( enter-command-from-insert
  266.                  delete-mode-view
  267.              exit-fold
  268.              add-mode-view
  269.            )
  270.           )
  271.           }}}
  272.           {{{  vi-unfold-fold
  273.           (deffun vi-unfold-fold
  274.            ( enter-command-from-insert
  275.                  delete-mode-view
  276.              unfold-fold
  277.              add-mode-view
  278.            )
  279.           )
  280.           }}}
  281.           {{{  vi-auto-header
  282.           (deffun vi-auto-header
  283.            ( enter-command-from-insert
  284.                  delete-mode-view
  285.              auto-header
  286.              add-mode-view
  287.            )
  288.           )
  289.           }}}
  290.           {{{  vi-toggle-file-fold
  291.           (deffun vi-toggle-file-fold
  292.            ( enter-command-from-insert
  293.                  delete-mode-view
  294.              toggle-file-fold
  295.              add-mode-view
  296.            )
  297.           )
  298.           }}}
  299.           {{{  vi-attach-file-to-fold
  300.           (deffun vi-attach-file-to-fold
  301.            ( enter-command-from-insert
  302.                  delete-mode-view
  303.              toggle-attach-file-to-fold
  304.              add-mode-view
  305.            )
  306.           )
  307.           }}}
  308.           ;vi-open-buffer
  309.           ;vi-open-list-buffer
  310.           ;vi-next-buffer
  311.           ;vi-previous-buffer
  312.           ;vi-grow-buffer
  313.           ;vi-shrink-buffer
  314.           ;vi-goto-buffer (term)
  315.           ;vi-used-buffers
  316.           ;vi-count-buffer
  317.  
  318.       }}}
  319.       {{{  vi-x
  320.       (deffun vi-x
  321.        ( enter-command-from-insert
  322.          delete-mode-view
  323.          do (delete-character set tot -(tot 1)) while >(tot 0)
  324.          set tot 0
  325.          add-mode-view
  326.        )
  327.       )
  328.       }}}
  329.       {{{  vi-X
  330.       (deffun vi-X
  331.        ( enter-command-from-insert
  332.          delete-mode-view
  333.          do (delete-previous-character set tot -(tot 1)) while >(tot 0)
  334.          set tot 0
  335.          add-mode-view
  336.        )
  337.       )
  338.       }}}
  339.  
  340.       {{{  active mode identifiers
  341.       ;nothing active
  342.       ;c  1  change
  343.       ;d  2  delete
  344.       ;V  3  fold
  345.       ;>  4  shift in
  346.       ;<  5  shift out
  347.       ;y  6  yank
  348.       }}}
  349.  
  350.       {{{  is-line-command
  351.           (deffun is-line-command
  352.            (
  353.              set diffx -(end-x start-x)
  354.              set diffy -(end-y start-y)
  355.            )
  356.           )
  357.  
  358.           ; useage
  359.           ;   if and(counter-0 diffx,counter-0 diffy)
  360.           ;    (   :
  361.           ;        :
  362.           ;    )
  363.           ;    etc.
  364.  
  365.       }}}
  366.  
  367.       {{{  perform stuff for V command and motion modes
  368.            {{{  do-v-command
  369.            (deffun do-v-command
  370.             (set isactive 3 ; make v active
  371.              ; this is always a line command!
  372.              beginning-of-line
  373.              set-start-mark
  374.              enter-motion-mode
  375.             )
  376.            )
  377.            }}}
  378.            {{{  do-v-motion
  379.            (deffun do-v-motion
  380.             (if pre(set isactive -(isactive 3)) =(isactive 0)
  381.               ( end-of-line
  382.                 set-end-mark
  383.                 delete-mode-view
  384.                 fold-region
  385.                 enter-command-mode
  386.               )
  387.             else
  388.               (enter-command-mode
  389.                message-exit ( "[ "Folding! "] )
  390.               )
  391.              fi
  392.              )
  393.            )
  394.            }}}
  395.       }}}
  396.       {{{  perform stuff for d command and motion modes
  397.            {{{  do-d-command
  398.            (deffun do-d-command
  399.             (set isactive 2 ; make d active
  400.              set-start-mark
  401.              enter-motion-mode
  402.             )
  403.            )
  404.            }}}
  405.            {{{  do-d-motion
  406.            (deffun do-d-motion
  407.             (if pre(set isactive -(isactive 2)) =(isactive 0)
  408.               ( ; then delete
  409.                 delete-mode-view
  410.                 set-end-mark
  411.                 fold-region
  412.                 delete-line
  413.                 is-line-command
  414.                 enter-command-mode
  415.               )else
  416.               (enter-command-mode
  417.                message-exit ( "[ "Deleting! "] )
  418.               )
  419.              fi
  420.             )
  421.            )
  422.            }}}
  423.       }}}
  424.       {{{  perform stuff for c command and motion modes
  425.            (deffun do-c-command
  426.             (set isactive 1 ; make c active
  427.              set-start-mark
  428.              enter-motion-mode
  429.             )
  430.            )
  431.  
  432.            (deffun do-c-motion
  433.             (if pre(set isactive -(isactive 1)) =(isactive 0)
  434.               ( set-end-mark
  435.                 fold-region
  436.                 delete-line
  437.                 enter-insert-mode)
  438.             else
  439.               (enter-command-mode
  440.                message-exit ( "[ "Changing! "] )
  441.               )
  442.              fi
  443.             )
  444.             )
  445.       }}}
  446.       {{{  perform stuff for y command and motion modes
  447.            {{{  do-y-command
  448.            (deffun do-y-command
  449.             (set isactive 6 ; make d active
  450.              set-start-mark
  451.              enter-motion-mode
  452.             )
  453.            )
  454.            }}}
  455.            {{{  do-y-motion
  456.            (deffun do-y-motion
  457.             (if pre(set isactive -(isactive 6)) =(isactive 0)
  458.               ( ; then yank
  459.                 set-end-mark
  460.                 delete-mode-view
  461.                 fold-region
  462.                 double-line
  463.                 delete-line
  464.                 unfold-fold
  465.                 enter-command-mode
  466.               )
  467.             else
  468.               (enter-command-mode
  469.                message-exit ( "[ "yanking! "] )
  470.               )
  471.              fi
  472.             )
  473.            )
  474.            }}}
  475.       }}}
  476.       {{{  command or move or repeat mode?
  477.  
  478.       {{{  crm-V
  479.       (deffun crm-V
  480.        ( enter-command-from-insert
  481.          if =(modec 0)
  482.           ( do-v-command enter-motion-mode)
  483.          else
  484.           ( do-v-motion enter-command-mode)
  485.          fi
  486.        )
  487.       )
  488.  
  489.       }}}
  490.       {{{  crm-d
  491.       (deffun crm-d
  492.        ( enter-command-from-insert
  493.          if =(modec 0)
  494.           ( do-d-command)
  495.          else
  496.           ( set-end-mark
  497.             is-line-command
  498.             if =(diffy 0) ; then a line command
  499.               {{{  fudge start & finish x
  500.               ;insert check for begin/end conditions when rest works
  501.               (
  502.                if =(diffx 0)
  503.                 ( ; dx==dy==0 remove line
  504.                   delete-mode-view
  505.                   delete-line
  506.                   enter-command-mode
  507.                 )
  508.                else
  509.                 ( ; dy==0 dx!=0 remove part of line
  510.                   do-d-motion
  511.                   previous-line
  512.                   vi-append-to-previous-line
  513.                 )
  514.               fi
  515.               )
  516.               else
  517.                ( ; dy!=0 remove several lines
  518.                  {{{  correct start
  519.                  set go-line-arg start-y
  520.                  go-line
  521.                  beginning-of-line
  522.                  set start-x store-pos
  523.                  }}}
  524.                  {{{  correct end
  525.                  ;put cursor at end of last line and save
  526.                  set go-line-arg end-y
  527.                  go-line
  528.                  end-of-line
  529.                  set end-x store-pos
  530.                  }}}
  531.                  do-d-motion
  532.                  enter-command-mode
  533.                )
  534.               }}}
  535.             fi
  536.           )
  537.          fi
  538.        )
  539.       )
  540.       }}}
  541.       {{{  crm-c
  542.       (deffun crm-c
  543.        ( enter-command-from-insert
  544.          if =(modec 0)
  545.           ( do-c-command )
  546.          else
  547.           ( set-end-mark
  548.             is-line-command
  549.             if =(diffy 0); then a line command
  550.               {{{  fudge start & finish x
  551.               ;insert check for begin/end conditions when rest works
  552.               (
  553.                if =(diffx 0)
  554.                 ( ; dx==dy==0 remove line
  555.                   delete-mode-view
  556.                   delete-line
  557.                   enter-command-mode
  558.                 )
  559.                else
  560.                 ( ; dy==0 dx!=0 remove part of line
  561.                   do-c-motion
  562.                   previous-line
  563.                   vi-append-to-previous-line
  564.                 )
  565.               fi
  566.               )
  567.               else
  568.                ( ; dy!=0 remove several lines
  569.                  {{{  correct start
  570.                  set go-line-arg start-y
  571.                  go-line
  572.                  beginning-of-line
  573.                  set start-x store-pos
  574.                  }}}
  575.                  {{{  correct end
  576.                  ;put cursor at end of last line and save
  577.                  set go-line-arg end-y
  578.                  go-line
  579.                  end-of-line
  580.                  set end-x store-pos
  581.                  }}}
  582.                  do-d-motion
  583.                  enter-command-mode
  584.                )
  585.               }}}
  586.             fi
  587.           )
  588.           fi
  589.        )
  590.       )
  591.       }}}
  592.       {{{  crm-D
  593.       (deffun crm-D
  594.        ;Always character based delete!
  595.        ( enter-command-from-insert
  596.          if =(modec 0)
  597.           ( do-d-command )
  598.          else
  599.           ( do-d-motion )
  600.          fi
  601.        )
  602.       )
  603.       }}}
  604.       {{{  crm-y
  605.       (deffun crm-y
  606.        ( enter-command-from-insert
  607.          if =(modec 0)
  608.           ( do-y-command)
  609.          else
  610.           ( set-end-mark
  611.             is-line-command
  612.             if =(diffy 0) ; then a line command
  613.               {{{  fudge start & finish x
  614.               ;insert check for begin/end conditions when rest works
  615.               (
  616.                if =(diffx 0)
  617.                 ( ; dx==dy==0 remove line
  618.                   delete-mode-view
  619.                   delete-line
  620.                   undo-delete-line
  621.                   enter-command-mode
  622.                 )
  623.                else
  624.                 ( ; dy==0 dx!=0 remove part of line
  625.                   do-y-motion
  626.                   previous-line
  627.                   vi-append-to-previous-line
  628.                 )
  629.               fi
  630.               )
  631.               else
  632.                ( ; dy!=0 remove several lines
  633.                  {{{  correct start
  634.                  set go-line-arg start-y
  635.                  go-line
  636.                  beginning-of-line
  637.                  set start-x store-pos
  638.                  }}}
  639.                  {{{  correct end
  640.                  ;put cursor at end of last line and save
  641.                  set go-line-arg end-y
  642.                  go-line
  643.                  end-of-line
  644.                  set end-x store-pos
  645.                  }}}
  646.                  do-y-motion
  647.                  enter-command-mode
  648.                )
  649.               }}}
  650.             fi
  651.           )
  652.          fi
  653.        )
  654.       )
  655.       }}}
  656.       {{{  crm-Y
  657.       (deffun crm-Y
  658.        ( enter-command-from-insert
  659.          if =(modec 0)
  660.           ( do-y-command )
  661.          else
  662.           ( do-y-motion )
  663.          fi
  664.        )
  665.       )
  666.       }}}
  667.       }}}
  668.  
  669.       {{{  indent outdent region
  670.       {{{  shift-in-command
  671.       (deffun shift-in-command
  672.        ( set isactive 4 ; make > active
  673.          set-start-mark
  674.          enter-motion-mode
  675.        )
  676.       )
  677.       }}}
  678.       {{{  shift-in-motion
  679.       (deffun shift-in-motion
  680.        ( if =(isactive 4)
  681.           ( set-end-mark
  682.             indent-region( 4 )
  683.             enter-command-mode
  684.           )
  685.         fi
  686.        )
  687.       )
  688.       }}}
  689.       {{{  crm-shift-in
  690.       (deffun crm-shift-in
  691.        ( enter-command-from-insert
  692.          if =(modec 0)
  693.             ( shift-in-command )
  694.          else
  695.             ( shift-in-motion )
  696.          fi
  697.        )
  698.       )
  699.       }}}
  700.       {{{  shift-out-command
  701.       (deffun shift-out-command
  702.        ( set isactive 5; make < active
  703.          set-start-mark
  704.          enter-motion-mode
  705.        )
  706.       )
  707.       }}}
  708.       {{{  shift-out-motion
  709.       (deffun shift-out-motion
  710.        ( if =(isactive 5 )
  711.            ( set-end-mark
  712.              indent-region( -4 )
  713.              enter-command-mode
  714.            )
  715.           fi
  716.        )
  717.       )
  718.       }}}
  719.       {{{  crm-shift-out
  720.       (deffun crm-shift-out
  721.        ( enter-command-from-insert
  722.          if =(modec 0)
  723.           ( shift-out-command )
  724.          else
  725.           ( shift-out-motion)
  726.          fi
  727.        )
  728.       )
  729.       }}}
  730.       }}}
  731.       {{{  set language
  732.       (deffun vi-set-language
  733.        ( enter-command-from-insert
  734.          delete-mode-view
  735.          set-language
  736.        )
  737.       )
  738.       }}}
  739.       {{{  vi +_-
  740.       (deffun vi-underscore
  741.        ( enter-command-from-insert
  742.          previous-line
  743.          beginning-of-line
  744.        )
  745.       )
  746.       (deffun vi-plus
  747.        (enter-command-from-insert
  748.          next-line
  749.          beginning-of-line
  750.        )
  751.       )
  752.       }}}
  753.       {{{  create-line-fold
  754.       (deffun create-line-fold
  755.           ( enter-command-from-insert
  756.             delete-mode-view
  757.             create-fold
  758.             create-fold
  759.             add-mode-view
  760.           )
  761.          )
  762.       }}}
  763.       {{{  vi-set-argument-X family
  764.          {{{  deffun vi-set-argument-0
  765.          (deffun vi-set-argument-0
  766.           ( enter-command-from-insert
  767.                if =(tot 0)
  768.             (goto 0)
  769.            else
  770.            ( set tot *(tot 10))
  771.            fi
  772.           )
  773.          )
  774.          }}}
  775.          {{{  vi-set-argument-1
  776.          (deffun vi-set-argument-1
  777.           (enter-command-from-insert
  778.                if =(tot 0)
  779.              ( set tot 1
  780.              )
  781.             else
  782.             ( set tot +(*(tot 10) 1)
  783.             )
  784.            fi
  785.           )
  786.          )
  787.          }}}
  788.          {{{  vi-set-argument-2
  789.          (deffun vi-set-argument-2
  790.           (enter-command-from-insert
  791.                if =(tot 0)
  792.              ( set tot 2
  793.              )
  794.             else
  795.             ( set tot +(*(tot 10) 2)
  796.             )
  797.            fi
  798.           )
  799.          )
  800.          }}}
  801.          {{{  vi-set-argument-3
  802.          (deffun vi-set-argument-3
  803.           ( enter-command-from-insert
  804.                if =(tot 0)
  805.              ( set tot 3
  806.              )
  807.             else
  808.             ( set tot +(*(tot 10) 3)
  809.             )
  810.            fi
  811.           )
  812.          )
  813.          }}}
  814.          {{{  vi-set-argument-4
  815.          (deffun vi-set-argument-4
  816.           (enter-command-from-insert
  817.             if =(tot 0)
  818.              ( set tot 4
  819.              )
  820.             else
  821.             ( set tot +(*(tot 10) 4)
  822.             )
  823.            fi
  824.           )
  825.          )
  826.          }}}
  827.          {{{  vi-set-argument-5
  828.          (deffun vi-set-argument-5
  829.           (enter-command-from-insert
  830.             if =(tot 0)
  831.              ( set tot 5
  832.              )
  833.             else
  834.             ( set tot +(*(tot 10) 5)
  835.             )
  836.            fi
  837.           )
  838.          )
  839.          }}}
  840.          {{{  vi-set-argument-6
  841.          (deffun vi-set-argument-6
  842.           (enter-command-from-insert
  843.                if =(tot 0)
  844.              ( set tot 6
  845.              )
  846.             else
  847.             ( set tot +(*(tot 10) 6)
  848.             )
  849.            fi
  850.           )
  851.          )
  852.          }}}
  853.          {{{  vi-set-argument-7
  854.          (deffun vi-set-argument-7
  855.           ( enter-command-from-insert
  856.                if =(tot 0)
  857.              ( set tot 7
  858.              )
  859.             else
  860.             ( set tot +(*(tot 10) 7)
  861.             )
  862.            fi
  863.           )
  864.          )
  865.          }}}
  866.          {{{  vi-set-argument-8
  867.          (deffun vi-set-argument-8
  868.           ( enter-command-from-insert
  869.                if =(tot 0)
  870.              ( set tot 8
  871.              )
  872.             else
  873.             ( set tot +(*(tot 10) 8)
  874.             )
  875.            fi
  876.           )
  877.          )
  878.          }}}
  879.          {{{  vi-set-argument-9
  880.          (deffun vi-set-argument-9
  881.           ( enter-command-from-insert
  882.                if =(tot 0)
  883.              ( set tot 9
  884.              )
  885.             else
  886.             ( set tot +(*(tot 10) 9)
  887.             )
  888.            fi
  889.           )
  890.          )
  891.          }}}
  892.          {{{  test tot
  893.          (deffun test-tot
  894.          (enter-command-from-insert
  895.               delete-mode-view
  896.          counter  tot
  897.          add-mode-view
  898.          )
  899.          )
  900.          (deffun test-ascii
  901.           ( enter-command-from-insert
  902.                delete-mode-view insert-ascii 77 add-mode-view)
  903.          )
  904.          }}}
  905.  
  906.       }}}
  907.       {{{  extended mode control macros
  908.       (deffun add-mode-extended (enter-command-from-insert set extended 1 ))
  909.       (deffun delete-mode-extended (enter-command-from-insert set extended 0 ))
  910.       (deffun vi-add-mode-wrap (enter-command-from-insert set wrap-mode 1 ))
  911.       (deffun vi-delete-mode-wrap (enter-command-from-insert set wrap-mode 0  ))
  912.       (deffun del-line-stop-mode (enter-command-from-insert set stop-at-eol 0))
  913.       (deffun add-line-stop-mode (enter-command-from-insert set stop-at-eol 1))
  914.       (deffun vi-add-mode-autosave (enter-command-from-insert add-mode-autosave))
  915.       (deffun vi-del-mode-autosave (enter-command-from-insert delete-mode-autosave))
  916.       }}}
  917.       {{{  vi-goto-line
  918.       (deffun vi-goto-line
  919.        ( enter-command-from-insert
  920.          if =(tot 0)
  921.           ( end-of-fold )
  922.          else
  923.           ( if <>(fast-gotol 0)
  924.              ( set go-line-arg  tot
  925.                go-line
  926.                set tot 0
  927.              )
  928.              else
  929.              ( goto-line-counter tot
  930.                set tot 0
  931.              )
  932.             fi
  933.           )
  934.          fi
  935.        )
  936.       )
  937.       }}}
  938.       {{{  toggle fast-goto
  939.       (deffun fast-goto (enter-command-from-insert set fast-gotol 0))
  940.       (deffun slow-goto (enter-command-from-insert set fast-gotol 1))
  941.       }}}
  942.       {{{  vi-goto-column
  943.        (deffun vi-goto-column
  944.         ( enter-command-from-insert
  945.           goto tot
  946.           set tot 0 )
  947.         )
  948.       }}}
  949.  
  950.       {{{  vi-backward-character/forward-character
  951.       (deffun vi-backward-character
  952.        ( enter-command-from-insert 
  953.          do ( backward-character set tot -(tot 1)) while >(tot 0)
  954.          set tot 0
  955.        )
  956.       )
  957.       (deffun vi-forward-character
  958.        ( enter-command-from-insert 
  959.          do (forward-character set tot -(tot 1)) while >(tot 0)
  960.          set tot 0
  961.        )
  962.       )
  963.       }}}
  964.       {{{  vi-start/end-of line
  965.       (deffun vi-beginning-of-line
  966.        ( enter-command-from-insert
  967.          beginning-of-line
  968.        )
  969.       )
  970.       (deffun vi-end-of-line
  971.        ( enter-command-from-insert
  972.          end-of-line
  973.        )
  974.       )
  975.       }}}
  976.       {{{  vi-beginning/end-of-fold
  977.       (deffun vi-beginning-of-fold
  978.        ( enter-command-from-insert
  979.          beginning-of-fold
  980.        )
  981.       )
  982.       (deffun vi-end-of-fold
  983.        ( enter-command-from-insert
  984.          end-of-fold
  985.        )
  986.       )
  987.  
  988.       }}}
  989.       {{{  vi-start/end-word
  990.       (deffun vi-start-word
  991.        ( enter-command-from-insert
  992.          start-word
  993.        )
  994.       )
  995.       (deffun vi-end-word
  996.        ( enter-command-from-insert
  997.          end-word
  998.        )
  999.       )
  1000.       }}}
  1001.       {{{  display motion stuff
  1002.       (deffun vi-C-B
  1003.        ( enter-command-from-insert
  1004.          do ( previous-page set tot +(tot -1)) while >(tot 0)
  1005.          set tot 0
  1006.        )
  1007.       )
  1008.       (deffun vi-C-F
  1009.        ( enter-command-from-insert
  1010.          do ( next-page set tot +(tot -1)) while >(tot 0)
  1011.          set tot 0
  1012.        )
  1013.       )
  1014.       }}}
  1015.       {{{  vi-fill-paragraph
  1016.       (deffun vi-fill-paragraph
  1017.        ( enter-command-from-insert 
  1018.          delete-mode-view
  1019.          fill-paragraph
  1020.          add-mode-view
  1021.        )
  1022.       )
  1023.       }}}
  1024.       {{{  line motion with repeat
  1025.       (deffun vi-previous-line
  1026.        ( enter-command-from-insert
  1027.          do ( previous-line set tot +(tot -1)) while >(tot 0)
  1028.          set tot 0
  1029.        )
  1030.       )
  1031.       (deffun vi-next-line
  1032.        ( enter-command-from-insert
  1033.          do (next-line set tot +(tot -1)) while >(tot 0)
  1034.          set tot 0
  1035.        )
  1036.       )
  1037.       }}}
  1038.       {{{  redraw display
  1039.       (deffun redraw-display-
  1040.        ( enter-command-from-insert
  1041.          redraw-display
  1042.        )
  1043.       )
  1044.       }}}
  1045.       {{{  center-redraw display
  1046.       (deffun center-and-redraw-display-
  1047.        ( enter-command-from-insert
  1048.          center-and-redraw-display
  1049.        )
  1050.       )
  1051.       }}}
  1052.       {{{  status line
  1053.       (deffun status-line-off-
  1054.        ( enter-command-from-insert
  1055.          status-line-off
  1056.        )
  1057.       )
  1058.       (deffun status-line-on-
  1059.        ( enter-command-from-insert
  1060.          status-line-on
  1061.        )
  1062.       )
  1063.       }}}
  1064.       {{{  describe-fold
  1065.       }}}
  1066.       {{{  Marks
  1067.          {{{  vi-set-mark
  1068.          (deffun vi-set-mark
  1069.           ( enter-command-from-insert
  1070.             parameter-mode
  1071.             prompt-char-counter mc ("Enter "  "Mark "  "letter )
  1072.             ; A is 65
  1073.             ; Z is 90
  1074.             ; a is 97
  1075.             ; z is 122
  1076.             ; ' is 39
  1077.             ; ` is 96
  1078.             if and(>=(mc 97),<=(mc 122))
  1079.             ( ; then its lower case
  1080.               set mc -(mc 97)
  1081.             )
  1082.             else
  1083.             ( if and(>=(mc 65),<=(mc 90))
  1084.               ( ; then its lower case
  1085.                 set mc -(mc 65)
  1086.               )
  1087.               else
  1088.               ( ; its an error
  1089.                 return-from-macro
  1090.               )
  1091.               fi
  1092.             )
  1093.             fi
  1094.             set mx(mc) store-pos
  1095.             set my(mc) store-line-mark
  1096.             exit-parameter-mode
  1097.             enter-command-mode
  1098.            )
  1099.           )
  1100.          }}}
  1101.          {{{  vi-goto-mark
  1102.          (deffun vi-goto-mark
  1103.           ( enter-command-from-insert
  1104.             parameter-mode
  1105.             prompt-char-counter mc ("Enter "  "Mark "  "letter )
  1106.             ; A is 65
  1107.             ; Z is 90
  1108.             ; a is 97
  1109.             ; z is 122
  1110.             ; ' is 39
  1111.             ; ` is 96
  1112.             if and(>=(mc 97),<=(mc 122))
  1113.             ( ; then its lower case
  1114.               set mc -(mc 97)
  1115.             )
  1116.             else
  1117.             ( if and(>=(mc 65),<=(mc 90))
  1118.               ( ; then its lower case
  1119.                 set mc -(mc 65)
  1120.               )
  1121.               else
  1122.               ( ; its an error
  1123.                 return-from-macro
  1124.               )
  1125.               fi
  1126.             )
  1127.             fi
  1128.             set mtemp my(mc)
  1129.             goto-line-mark mtemp
  1130.             exit-parameter-mode
  1131.             enter-command-mode
  1132.            )
  1133.           )
  1134.          }}}
  1135.          {{{  vi-goto-mark-exact
  1136.          (deffun vi-goto-mark-exact
  1137.           ( enter-command-from-insert
  1138.             parameter-mode
  1139.             prompt-char-counter mc ("Enter "  "Mark "  "letter )
  1140.             ; A is 65
  1141.             ; Z is 90
  1142.             ; a is 97
  1143.             ; z is 122
  1144.             ; ' is 39
  1145.             ; ` is 96
  1146.             if and(>=(mc 97),<=(mc 122))
  1147.             ( ; then its lower case
  1148.               set mc -(mc 97)
  1149.             )
  1150.             else
  1151.             ( if and(>=(mc 65),<=(mc 90))
  1152.               ( ; then its lower case
  1153.                 set mc -(mc 65)
  1154.               )
  1155.               else
  1156.               ( ; its an error
  1157.                 return-from-macro
  1158.               )
  1159.               fi
  1160.             )
  1161.             fi
  1162.             set mtemp my(mc)
  1163.             goto-line-mark mtemp
  1164.             set mtemp mx(mc)
  1165.             goto-counter mtemp
  1166.             exit-parameter-mode
  1167.             enter-command-mode
  1168.            )
  1169.           )
  1170.          }}}
  1171.       }}}
  1172.       {{{  !filter line
  1173.       (deffun vi-filter-line
  1174.        ( enter-parameter-mode
  1175.          delete-mode-view
  1176.          filter-line "awk "-f "prg newline-and-indent
  1177.          enter-command-mode
  1178.        )
  1179.       )
  1180.       }}}
  1181.    }}}
  1182.    {{{  insert mode functions
  1183.        {{{  brace } showmatch
  1184.        (deffun brace-close
  1185.         ( "}
  1186.           backward-character
  1187.           goto-matching-fence
  1188.           show-cursor 10
  1189.           set go-line-arg matching-fence-y go-line
  1190.           goto matching-fence-x
  1191.           forward-character
  1192.           enter-insert-mode
  1193.         )
  1194.        )
  1195.        }}}
  1196.        {{{  close-bracket ) showmatch
  1197.        (deffun close-bracket
  1198.         ( ")
  1199.           backward-character
  1200.           goto-matching-fence
  1201.           show-cursor 10
  1202.           set go-line-arg matching-fence-y go-line
  1203.           goto matching-fence-x
  1204.           forward-character
  1205.           enter-insert-mode
  1206.         )
  1207.        )
  1208.        }}}
  1209.        {{{  square-bracket ] showmatch
  1210.        (deffun square-bracket-close
  1211.         ( "]
  1212.           backward-character
  1213.           goto-matching-fence
  1214.           show-cursor 10
  1215.           set go-line-arg matching-fence-y go-line
  1216.           goto matching-fence-x
  1217.           forward-character
  1218.           enter-insert-mode
  1219.         )
  1220.        )
  1221.        }}}
  1222.        {{{  tabin
  1223.        (deffun tabin
  1224.         ( set tabx +(store-pos 4)
  1225.           beginning-of-line
  1226.           "  "  "  "  ;
  1227.           goto tabx
  1228.          )
  1229.        )
  1230.        }}}
  1231.        {{{  tabout
  1232.        (deffun tabout
  1233.         ( set tabx -(store-pos 4)
  1234.           beginning-of-line
  1235.           ;while whitespace and still crunching
  1236.         )
  1237.        )
  1238.        }}}
  1239.        {{{  getxselection
  1240.        (deffun vi-get-Xselection
  1241.         ( pipe-from-command "xv_get_sel newline-and-indent
  1242.         )
  1243.        )
  1244.        }}}
  1245.    }}}
  1246.    {{{  mouse
  1247.    @if-using not(ATARI)
  1248.       @if-using (MOUSY)
  1249.          ( mouse-buttons
  1250.            go-and-open-mouse
  1251.            go-and-close-mouse
  1252.            go-mouse-and-center
  1253.          )
  1254.       @fi
  1255.    @fi
  1256.    @if-using (ATARI)
  1257.       @if-using (MOUSY)
  1258.          ( mouse-buttons
  1259.            go-and-open-mouse
  1260.            go-mouse-and-center
  1261.            go-and-close-mouse
  1262.            go-and-close-mouse
  1263.          )
  1264.       @fi
  1265.    @fi
  1266.    }}}
  1267.